﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using transportsystem.DTO;
using transportsystem.BUS;

namespace transportsystem
{
    public partial class frmPhanQuyen : Form
    {
        DataTable dt;
        bool hideControls = true;
        int iIndex = 0;
        bool addNew = false;

        void HideAddNew(bool value)
        {
            if (value == true)
                pnlAddNew.Visible = false;
            else
                pnlAddNew.Visible = true;
        }

        public void SetDataGridTitle()
        {
            string[] a = new string[23] { "Mã phân quyền", "Cập nhật tài khoản", "Đăng nhập", "Đăng xuất", "Tra cứu", 
                "Thao tác đặt vé", "Cập nhật thông tin vé", "Thao tác hủy vé", "Điều phối chuyến xe", "Quản lý đại lý", 
                "Quản lý đặt vé", "Quản lý khách hàng", "Tính chi phí", "Thống kê nhân viên", "Thống kê doanh thu", 
                "Báo cáo doanh thu", "Quản lý hóa đơn", "Quản lý kho hàng", "Quản lý lịch trình", "Quản lý người dùng", 
                "Quản lý nhân viên", "Quản lý tuyến xe", "Quản lý xe" };

            for (int i = 0; i < a.Count(); i++)
                dgv.Columns[i].HeaderText = a[i];
        }

        public void SetValueToControls()
        {
            if (dt.Rows.Count > 0)
            {
                int z;
                txtMaPhanQuyen.Text = dt.Rows[iIndex]["maphanquyen"].ToString();

                z = int.Parse(dt.Rows[iIndex]["capnhattaikhoan"].ToString());
                if (z == 0)
                    chkCapNhatTaiKhoan.Checked = false;
                else
                    chkCapNhatTaiKhoan.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["dangnhap"].ToString());
                if (z == 0)
                    chkDangNhap.Checked = false;
                else
                    chkDangNhap.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["dangxuat"].ToString());
                if (z == 0)
                    chkDangXuat.Checked = false;
                else
                    chkDangXuat.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["tracuu"].ToString());
                if (z == 0)
                    chkTraCuu.Checked = false;
                else
                    chkTraCuu.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["thaotacdatve"].ToString());
                if (z == 0)
                    chkThaoTacDatVe.Checked = false;
                else
                    chkThaoTacDatVe.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["capnhatthongtinve"].ToString());
                if (z == 0)
                    chkCapNhatThongTinVe.Checked = false;
                else
                    chkCapNhatThongTinVe.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["thaotachuyve"].ToString());
                if (z == 0)
                    chkThaoTacHuyVe.Checked = false;
                else
                    chkThaoTacHuyVe.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["dieuphoichuyenxe"].ToString());
                if (z == 0)
                    chkDieuPhoiChuyenXe.Checked = false;
                else
                    chkDieuPhoiChuyenXe.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["quanlydaily"].ToString());
                if (z == 0)
                    chkQuanLyDaiLy.Checked = false;
                else
                    chkQuanLyDaiLy.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["quanlydatve"].ToString());
                if (z == 0)
                    chkQuanLyDatVe.Checked = false;
                else
                    chkQuanLyDatVe.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["quanlykhachhang"].ToString());
                if (z == 0)
                    chkQuanLyKhachHang.Checked = false;
                else
                    chkQuanLyKhachHang.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["tinhchiphi"].ToString());
                if (z == 0)
                    chkTinhChiPhi.Checked = false;
                else
                    chkTinhChiPhi.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["thongkenhanvien"].ToString());
                if (z == 0)
                    chkThongKeNhanVien.Checked = false;
                else
                    chkThongKeNhanVien.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["thongkedoanhthu"].ToString());
                if (z == 0)
                    chkThongKeDoanhThu.Checked = false;
                else
                    chkThongKeDoanhThu.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["baocaodoanhthu"].ToString());
                if (z == 0)
                    chkBaoCaoDoanhThu.Checked = false;
                else
                    chkBaoCaoDoanhThu.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["quanlyhoadon"].ToString());
                if (z == 0)
                    chkQuanLyHoaDon.Checked = false;
                else
                    chkQuanLyHoaDon.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["quanlykhohang"].ToString());
                if (z == 0)
                    chkQuanLyKhoHang.Checked = false;
                else
                    chkQuanLyKhoHang.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["quanlylichtrinh"].ToString());
                if (z == 0)
                    chkQuanLyLichTrinh.Checked = false;
                else
                    chkQuanLyLichTrinh.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["quanlynguoidung"].ToString());
                if (z == 0)
                    chkQuanLyNguoiDung.Checked = false;
                else
                    chkQuanLyNguoiDung.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["quanlynhanvien"].ToString());
                if (z == 0)
                    chkQuanLyNhanVien.Checked = false;
                else
                    chkQuanLyNhanVien.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["quanlytuyenxe"].ToString());
                if (z == 0)
                    chkQuanLyTuyenXe.Checked = false;
                else
                    chkQuanLyTuyenXe.Checked = true;

                z = int.Parse(dt.Rows[iIndex]["quanlyxe"].ToString());
                if (z == 0)
                    chkQuanLyXe.Checked = false;
                else
                    chkQuanLyXe.Checked = true;

                lblCount.Text = "Hiện có " + dgv.Rows.Count.ToString() + " phân quyền.";
                lblNote.Text = "0: Không cấp quyền - 1: Được cấp quyền.";
            }
        }

        public void AddNewPrepair()
        {
            txtMaPhanQuyen.Text = "";

            chkCapNhatTaiKhoan.Checked = false;
            chkDangNhap.Checked = false;
            chkDangXuat.Checked = false;
            chkTraCuu.Checked = false;
            chkThaoTacDatVe.Checked = false;
            chkCapNhatThongTinVe.Checked = false;
            chkThaoTacHuyVe.Checked = false;
            chkDieuPhoiChuyenXe.Checked = false;
            chkQuanLyDaiLy.Checked = false;
            chkQuanLyDatVe.Checked = false;
            chkQuanLyKhachHang.Checked = false;
            chkTinhChiPhi.Checked = false;
            chkThongKeNhanVien.Checked = false;
            chkThongKeDoanhThu.Checked = false;
            chkBaoCaoDoanhThu.Checked = false;
            chkQuanLyHoaDon.Checked = false;
            chkQuanLyKhoHang.Checked = false;
            chkQuanLyLichTrinh.Checked = false;
            chkQuanLyNguoiDung.Checked = false;
            chkQuanLyNhanVien.Checked = false;
            chkQuanLyTuyenXe.Checked = false;
            chkQuanLyXe.Checked = false;

            addNew = true;
            chkDangNhap.Focus();
        }

        public int SetValue(bool b)
        {
            if (b == true)
                return 1;
            return 0;
        }

        public void WriteData()
        {
            PhanQuyen x = new PhanQuyen();

            //Khởi tạo và gán dữ liệu
            if (addNew == false)
                x.Maphanquyen = int.Parse(txtMaPhanQuyen.Text);

            x.Capnhattaikhoan = SetValue(chkCapNhatTaiKhoan.Checked);
            x.Dangnhap = SetValue(chkDangNhap.Checked);
            x.Dangxuat = SetValue(chkDangXuat.Checked);
            x.Tracuu = SetValue(chkTraCuu.Checked);
            x.Thaotacdatve = SetValue(chkThaoTacDatVe.Checked);
            x.Capnhatthongtinve = SetValue(chkCapNhatThongTinVe.Checked);
            x.Thaotachuyve = SetValue(chkThaoTacHuyVe.Checked);
            x.Dieuphoichuyenxe = SetValue(chkDieuPhoiChuyenXe.Checked);
            x.Quanlydaily = SetValue(chkQuanLyDaiLy.Checked);
            x.Quanlydatve = SetValue(chkQuanLyDatVe.Checked);
            x.Quanlykhachhang = SetValue(chkQuanLyKhachHang.Checked);
            x.Tinhchiphi = SetValue(chkTinhChiPhi.Checked);
            x.Thongkenhanvien = SetValue(chkThongKeNhanVien.Checked);
            x.Thongkedoanhthu = SetValue(chkThongKeDoanhThu.Checked);
            x.Baocaodoanhthu = SetValue(chkBaoCaoDoanhThu.Checked);
            x.Quanlyhoadon = SetValue(chkQuanLyHoaDon.Checked);
            x.Quanlykhohang = SetValue(chkQuanLyKhoHang.Checked);
            x.Quanlylichtrinh = SetValue(chkQuanLyLichTrinh.Checked);
            x.Quanlynguoidung = SetValue(chkQuanLyNguoiDung.Checked);
            x.Quanlynhanvien = SetValue(chkQuanLyNhanVien.Checked);
            x.Quanlytuyenxe = SetValue(chkQuanLyTuyenXe.Checked);
            x.Quanlyxe = SetValue(chkQuanLyXe.Checked);

            bool i = PhanQuyenBUS.updatePhanQuyen(x);
            string msg = "";
            if (i == true)
            {
                if (addNew == true)
                    msg = "Thêm thành công";
                else
                    msg = "Sửa thành công";
            }
            else
            {
                if (addNew == true)
                    msg = "Thêm thất bại";
                else
                    msg = "Sửa thất bại";
            }
            MessageBox.Show(msg);

            LoadData();
            addNew = false;

        }

        public void LoadData()
        {
            HideAddNew(hideControls);
            dt = PhanQuyenBUS.getPhanQuyenList();
            if (dt != null && dt.Rows.Count > 0)
                dgv.DataSource = dt;
            iIndex = 0;
            SetDataGridTitle();

            SetValueToControls();
        }

        public frmPhanQuyen()
        {
            InitializeComponent();
        }

        private void frmPhanQuyen_Load(object sender, EventArgs e)
        {
            LoadData();
        }

        private void chkHideControls_CheckedChanged(object sender, EventArgs e)
        {
            hideControls = !hideControls;
            HideAddNew(hideControls);
        }

        private void dgv_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            addNew = false;
            iIndex = e.RowIndex;
            SetValueToControls();
        }

        private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            addNew = false;
            iIndex = e.RowIndex;
            SetValueToControls();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            chkHideControls.Checked = true;
            hideControls = !chkHideControls.Checked;
            HideAddNew(hideControls);
            AddNewPrepair();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            WriteData();
        }

        private void btnRemove_Click(object sender, EventArgs e)
        {
            if (addNew == false)
            {
                PhanQuyen x = new PhanQuyen();
                x.Maphanquyen = int.Parse(txtMaPhanQuyen.Text.Trim());
                bool i = PhanQuyenBUS.deletePhanQuyen(x);
                string msg = "";
                if (i == true)
                    msg = "Xóa thành công";
                else
                    msg = "Xóa thất bại";
                MessageBox.Show(msg);

                LoadData();
            }
        }
    }
}
